package com.goldenKey.common.utils;

import java.security.SecureRandom;
import java.util.Random;

public class StringTools {

    // 可用的字符集，包含大写字母、小写字母和数字
    private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    private static final SecureRandom random = new SecureRandom();

    /**
     * 生成指定长度的随机字符串
     * @param length 需要生成的随机字符串的长度
     * @return 生成的随机字符串
     */
    public static String getRandomString(int length) {
        StringBuilder sb = new StringBuilder(length);

        // 从字符集 ALPHABET 中随机挑选字符并拼接成字符串
        for (int i = 0; i < length; i++) {
            sb.append(ALPHABET.charAt(random.nextInt(ALPHABET.length())));
        }

        return sb.toString();
    }

    /**
     * 根据时间戳长度+随机数长度生成随机ID（只包含数字）
     * @param timestampLength 时间戳部分的长度
     * @param randomLength 随机数部分的长度
     * @return 生成的用户ID
     */
    public static String generateId(Integer timestampLength, Integer randomLength) {
        // 获取当前的毫秒级时间戳
        long timestamp = System.currentTimeMillis();

        // 将时间戳转换为字符串
        String timestampStr = String.valueOf(timestamp);

        // 截取时间戳的指定长度部分
        String timestampPart = timestampStr.substring(timestampStr.length() - timestampLength);

        // 生成指定长度的随机数部分
        Random random = new Random();
        StringBuilder randomPart = new StringBuilder();

        // 生成一个指定长度的随机数
        for (int i = 0; i < randomLength; i++) {
            randomPart.append(random.nextInt(10));  // 生成 0 到 9 之间的数字
        }

        // 拼接时间戳和随机数，生成最终的用户ID
        return timestampPart + randomPart;
    }

    /**
     * 获取文件的后缀名
     * @param fileName 文件名
     * @return 文件后缀名，不包含点（.）符号
     */
    public static String getFileSuffix(String fileName) {
        if (fileName == null || fileName.isEmpty()) {
            return ""; // 如果文件名为空，返回空字符串
        }

        int index = fileName.lastIndexOf(".");
        if (index == -1) {
            return ""; // 如果没有点，表示没有后缀名，返回空字符串
        }

        // 返回点后的部分作为后缀名
        return fileName.substring(index + 1);
    }

    public static void main(String[] args) {
        // 示例：时间戳部分长度为 6，随机数部分长度为 4
        String userId = generateId(6, 4);
        System.out.println("Generated User ID: " + userId);
    }

}
